php怎么检测子字符串是否存在-天天看热讯

来源:php中文网 | 2022-10-13 18:57:25 |

php入门到就业线上直播课:进入学习Apipost = Postman + Swagger + Mock + Jmeter 超好用的API调试工具:点击使用

本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑


(资料图片仅供参考)

在进行字符串查找操作时,有时会要求在某一字符串中查找指定的子字符串(简称子串),看看该子串是否存在于这个字符串中。

我们一般会通过使用PHP内置函数来查找这个子串在字符串的第一次或最后一次的出现位置来进行判断。而查找字符串有两种情况:一种是对大小写不敏感,即不区分大小写的查找;另外一种是对大小写敏感,即区分大小写的查找。

情况一:判断子串是不是存在(大小写不敏感)

我们来看看下面一下栗子。

<?phpheader("Content-type:text/html;charset=utf-8");$string = "ABCDCBAbcd";$findme = "bC";echo "子串  “"$findme"” 第一次出现的位置:".stripos($string, $findme);echo "<br>子串  “"$findme"” 最后一次出现的位置:".strripos($string, $findme);?>

看看上例的代码,你们觉得这个结果会是什么?第一次出现的位置为“2”,最后一次出现的位置为“8”,对不对?我们来看一下输出结果:

哎呀,居然是“1”和“7”,为什么会这样?原因是:字符串位置起始于 0,而不是 1。我们按起始位置1来算当然不对。

因此我们就可以使用以下代码来判断子串是不是存在

<?phpheader("Content-type:text/html;charset=utf-8");$string = "ABCDCBAbcd";$findme = "bC";if(stripos($string, $findme)!=FALSE){echo "子串  “"$findme"” 在字符串  “"$string"” 中存在。";}else{echo "子串  “"$findme"” 在字符串  “"$string"” 中不存在。";}if(strripos($string, $findme)!=FALSE){echo "<br>子串  “"$findme"” 在字符串  “"$string"” 中存在。";}else{echo "<br>子串  “"$findme"” 在字符串  “"$string"” 中不存在。";}?>

输出结果:

下面我们具体看看这两个函数吧。

stripos($string,$find,$start)函数可以查找字符串在另一字符串中第一次出现的位置(不区分大小写)。

strripos($string,$find,$start)函数可以查找字符串在另一字符串中最后一次出现的位置(不区分大小写)。

这两个函数的参数是相似的,都接受两个必需参数$string$find,一个可省略参数$start

$string参数:用于指定要被查找的字符串。

$find参数:用于指定要查找的子串,可以包含一个或者多字符。(如果不是字符串类型,那么它将被转换为整型并被视为字符顺序值)。

$start参数:用于指定从$string中的哪个字符开始查找,返回的位置数字值仍然相对于 $string的起始位置。

但strripos()函数的$start参数允许使用负值,此时将使得查找从字符串的起始位置开始,到 $start位置为止。

<?phpheader("Content-type:text/html;charset=utf-8");$string = "ABCDCBAbcd";$findme = "bC";echo "子串  “"$findme"” 第一次出现的位置:".stripos($string, $findme,2);echo "<br>子串  “"$findme"” 最后一次出现的位置:".strripos($string, $findme,-5);?>

输出结果:

情况2:检测子串是不是存在(大小写敏感)

我们来看看下面一下示例

<?phpheader("Content-type:text/html;charset=utf-8");$string = "ABCDCBAbcd";$findme1 = "bC";$findme2 = "bc";$pos1 = strpos($string, $findme1);$pos2 = strrpos($string, $findme1);$pos3 = strpos($string, $findme2);$pos4 = strrpos($string, $findme2);if($pos1 !=FALSE){echo "子串 "$findme1" 在字符串  "$string" 中存在。";}else{echo "子串  "$findme1" 在字符串  "$string" 中不存在。";}if($pos2 !=FALSE){echo "<br>子串  "$findme1" 在字符串  "$string" 中存在。";}else{echo "<br>子串  "$findme1" 在字符串  "$string" 中不存在。";}if($pos3 !=FALSE){echo "<br>子串  "$findme2" 在字符串  "$string" 中存在。";}else{echo "<br>子串  "$findme2" 在字符串  "$string" 中不存在。";}if($pos4 !=FALSE){echo "<br>子串  "$findme2" 在字符串  "$string" 中存在。";}else{echo "<br>子串  "$findme2" 在字符串  "$string" 中不存在。";}?>

strpos()和strrpos()函数会区分大小写的在字符串$string中查找子串$findme1或者$findme2。当完全匹配上,存在子串时,会返回子串在字符串的第一次或最后一次的出现位置;如果在字符串的没有找到子串,则返回FALSE

从上面的例子可以看出,只有子串"bc"和字符串“ABCDCBAbcd”是完全匹配,子串"bc"被认为是存在于字符串“ABCDCBAbcd”中的。因此输出结果为:

下面我们来详细了解一下strpos()和strrpos()函数。

strpos($string,$find,$start)函数可以返回子字符串首次出现的位置(区分大小写);

strrpos($string,$find,$start)函数可以返回子字符串最后一次出现的位置(区分大小写);

strpos()和strrpos()函数相似,都接受两个必需参数$string(被查找的字符串)和$find(要查找的子串),一个可省略参数$start(查找的开始位置)。注:字符串位置起始于 0,而不是 1。

<?phpheader("Content-type:text/html;charset=utf-8");$string = "ABCabcabcABC";$findme1 = "c";$findme2 = "C";echo "子串  "$findme1" 第一次出现的位置:".strpos($string, $findme1);echo "<br>子串  "$findme1" 最后一次出现的位置:".strrpos($string, $findme1);echo "<br>子串  "$findme2" 第一次出现的位置:".strpos($string, $findme2);echo "<br>子串  "$findme2" 最后一次出现的位置:".strrpos($string, $findme2);?>

输出结果:

但strrpos()函数的参数$start可以接受负值,当它为负数时,将会导致查找在字符串结尾处开始的计数位置处结束。

<?phpheader("Content-type:text/html;charset=utf-8");$string = "ABCabcabcABC";$findme1 = "c";$findme2 = "C";echo "子串  "$findme1" 第一次出现的位置:".strpos($string, $findme1);echo "<br>子串  "$findme1" 最后一次出现的位置:".strrpos($string, $findme1,-5);echo "<br>子串  "$findme2" 第一次出现的位置:".strpos($string, $findme2);echo "<br>子串  "$findme2" 最后一次出现的位置:".strrpos($string, $findme2,-5);?>

输出结果:

推荐学习:《PHP视频教程》

以上就是php怎么检测子字符串是否存在的详细内容,更多请关注php中文网其它相关文章!

关键词: php字符串